package com.continautos.common.persistence.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Clase que maneja el acceso a la fuente de datos (Connection Pool). 
 * @author javier
 *
 */
public class ResourceManager {

	private static DataSource dataSource;
	private static InitialContext cxt;

	private static Log log = LogFactory.getLog(ResourceManager.class);

	static {
		try {
			cxt = new InitialContext();
			dataSource = (DataSource) cxt.lookup("java:/comp/env/jdbc/CONTINAUTOS");
		} catch (NamingException e) {
			log.error("ResourceManager: Problemas al inicializar el contexto.",
					e);
		}

	}

	/**
	 * Retorna una conexion del pool.
	 * 
	 * @return
	 */
	public static Connection getConnection() {

		Connection conection = null;
		
		
		/*
		if (dataSource != null) {

			try {
				conection = dataSource.getConnection();

			} catch (SQLException sqle) {
				log.error("ResourceManager: No puede obtener conexion.", sqle);
			}
		}
		*/
		
		String usuario = "continautos";
        String password = "continautos";
 
        String host = "localhost"; // tambien puede ser una ip como "192.168.1.14"
        String puerto = "3306";
        String database = "continautos";
 
        String driver = "com.mysql.jdbc.Driver";
 
        String ulrjdbc = "jdbc:mysql://" + host + ":" + puerto + "/" + database;
 
        try {
            Class.forName(driver).newInstance();
            conection = DriverManager.getConnection(ulrjdbc, usuario, password);
 
            // Ya tenemos el objeto connection creado
 
        } catch (Exception e) {
            e.printStackTrace();
        }
		
		return conection;
	}


	/**
	 * Devuelve la coneccion al pool.
	 * @param conn
	 */
	public static void close(Connection conn) {
		try {
			if (conn != null)
				conn.close();
		} catch (SQLException sqle) {
			log.error("ResourceManager: No puede cerrar la conexion.", sqle);
		}
	}

	/**
	 * Cierra el statement.
	 * @param stmt
	 */
	public static void close(PreparedStatement stmt) {
		try {
			if (stmt != null)
				stmt.close();
		} catch (SQLException sqle) {
			log.error("ResourceManager: No puede cerrar la conexion.", sqle);
		}
	}

	
	/**
	 * Cierra el result set
	 * @param rs
	 */
	public static void close(ResultSet rs) {
		try {
			if (rs != null)
				rs.close();
		} catch (SQLException sqle) {
			log.error("ResourceManager: No puede cerrar la conexion.", sqle);
		}

	}

}
